############################################################################
## 编译说明
## 编译过程使用动态库编译driver文件下面的所有驱动文件，生成一个动态so文件库，在通过core源文件编译成为一个可执行文件
## driver模块是一个独立运行的模块，模块下面通过多个线程来驱动不同的模块，同时通过进程间交互发布订阅通信数据。
## 同时driver模块为了方便其他模块调用，通过生成动态库，并将动态库安装到Linux系统中，其他模块可以直接调用
## CMake之install方法的使用:https://zhuanlan.zhihu.com/p/102955723
############################################################################

# VERSION需要和本机安装的Cmake对应
cmake_minimum_required(VERSION 3.10.2) 

# 指定了当前的工程名称，最后输出的可执行文件名称，赋值给了{PROJECT_NAME}变量
project(app) 

# c++ 11
set(CMAKE_CXX_FLAGS "-std=c++11")
#set(Protobuf_PROTOC_EXECUTABLE "/usr/local/bin/protoc")


# 引入外部依赖包
# find_package(OpenCV REQUIRED)
find_package(catkin REQUIRED COMPONENTS
  # can_msgs
#   roscpp
#   rospy
#   sensor_msgs
#   std_msgs
)

# 引入外部项目
# add_subdirectory(external/mower_ipc/proto)

# 添加头文件
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/driver)

# 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名{SC_FILES}中
FILE(GLOB 
    SC_FILES 
    ${PROJECT_SOURCE_DIR}/src/driver/driver_Xbox_Joystick.cpp 
    )


#####生成可执行文件
# 使用指定的源文件创建出一个可执行文件，第一个变量必须是可执行文件的名字，后面默认是其他源文件
add_executable(${PROJECT_NAME} ${SC_FILES} ${PROJECT_SOURCE_DIR}/src/main.cpp) 
# 指定链接给定目标和/或其依赖项时要使用的库或标志，链接动态库静态库等
target_link_libraries(${PROJECT_NAME} 
    # protobuf::libprotobuf 
    # eCAL::core
    # #${OpenCV_LIBS} 
    # pthread
    # controlcan  # 将自动从系统库/自定义库中查找libcontrolcan.so
)